package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {
    /*
       为注解添加参数
       格式:
       类型 参数名() [default 默认值]

       例如:
       int value();
       当这样定义后，当前注解就支持传入一个int行的参数。
       外面在使用注解时可以传参:
       @AutoRunMethod(11)   此时value参数的值为11


       在定义参数的同时可以为该参数指定默认值:
       int value() default 1;
       如果参数指定了默认值，那么在使用该注解时就不强制要求必须传参了，此时如果不传参则当前参数使用默认值:
       @AutoRunMethod(11)   此时value参数的值为11
       @AutoRunMethod       此时value参数的值使用默认值1

       注:
       如果注解仅定义了一个参数时，参数名尽量选取为"value"。如果指定为别的名字，那么在使用注解传参时会麻烦。
       结合多个参数说明传参语法:
       @注解名(参数1=对应值,参数2=对应值)  这里参数的顺序可以与注解中定义参数的顺序不一致
       例如:
       在AutoRunMethod注解中定义了两个参数:
        int age();
        String name();

        在使用注解时，传参如下:
        @AutoRunMethod(age=11,name="张三")
        @AutoRunMethod(name="李四",age=22)


      对于只有一个参数时:
      如果注解仅定义了一个参数时，参数名如果不叫"value"，那么传参时:参数名=参数值
      例如，注解定义参数:
      int num() default 1;
      使用时传参:
      @AutoRunMethod(num=22)

      如果只有一个参数，且参数名为"value"，那么传参时:
      @AutoRunMethod(22)   可以省去参数名

      注意:上述省略参数名的情况仅限于注解定义了一个参数时，如果包含多个参数时，在传参时每个参数名都不可以忽略
      例如:
      int value() default 1;
      String name();
      在使用注解时:
      @AutoRunMethod(value=22,name="XXXX")  可以的
      @AutoRunMethod(name="XXXX",value=22)  可以的
      @AutoRunMethod(22,name="XXXX")        不可以，此时value的参数名不可以忽略！！！


    */
    int value() default 1;

    //int age() default 1;
    //String name();
}
